package editorsvg.propiedades;

import editorsvg.editor.comandos.GestorComandos;
import editorsvg.editor.serializacion.AtributoXml;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Jorge Berjano
 */
public class DefinicionPropiedades {
    private ArrayList<GrupoPropiedades> listaGrupos = new ArrayList<GrupoPropiedades>();
    private GrupoPropiedades propiedadesNoIdentificadas;
    
    public DefinicionPropiedades() {        
    }
    
    public void agregar(GrupoPropiedades grupo) {
        if (grupo != null) {
            listaGrupos.add(grupo);
        }
    }

    public List<GrupoPropiedades> getGrupos() {
        return listaGrupos;
    }

    /**
     * Obtiene todas las propiedades en una única lista.
     */
    public List<AtributoXml> getAtributosXml() {
        ArrayList<AtributoXml> lista = new ArrayList<AtributoXml>();
         for (GrupoPropiedades grupo : listaGrupos) {             
            lista.addAll(grupo.getLista());             
         }
        
        return lista;
    }
    
    /**
     * Obrtiene una propiedad por un determinado nombre de atributo xml
     * Si no existe se crea y se mete en el grupo de propiedades no identificadas
     * @param alias
     * @return
     */
    public Propiedad obtenerPropiedadAtributoXml(String atributoXml) {
        for (GrupoPropiedades grupo : listaGrupos) {
            Propiedad propiedad = grupo.getPropiedadAtributoXml(atributoXml);
            if (propiedad != null) {
                return propiedad;
            }
        }
        
        if (propiedadesNoIdentificadas == null) {
            propiedadesNoIdentificadas = new GrupoPropiedades("Otras");
            listaGrupos.add(propiedadesNoIdentificadas);
        }
        PropiedadTextoMultilinea propiedad = new PropiedadTextoMultilinea(atributoXml, atributoXml);
        propiedadesNoIdentificadas.agregarPropiedad(propiedad);        
        return propiedad;
    }

    public void setGestorComandos(GestorComandos gestorComandos) {
        for (GrupoPropiedades grupo : listaGrupos) {
            grupo.setGestorComandos(gestorComandos);
        }
    }
    
//    public void setPropietario(Object objeto) {        
//        for (GrupoPropiedades grupo : listaGrupos) {
//            grupo.asignarObjeto(objeto);
//        }
//    }
}  
